#include <iostream>
#include <list>

using namespace std;
//list 插入和删除:对list容器进行数据的插入和删除
//函数原型：
//1、push_back(elem);            //在容器尾部加入一个元素
//2、pop_back();                 //删除容器中最后一个元素
//3、push_front(elem);           //在容器开头插入一个元素
//4、pop_front();                //从容器开头移除第一个元素
//5、insert(pos,elem);           //在pos位置插elem元素的拷贝，返回新数据的位置。
//6、insert(pos,n,elem);         //在pos位置插入n个elem数据，无返回值。
//7、insert(pos,beg,end);        //在pos位置插入[beg,end)区间的数据，无返回值。
//8、clear();                    //移除容器的所有数据
//9、erase(beg,end);             //删除[beg,end)区间的数据，返回下一个数据的位置。
//10、erase(pos);                //删除pos位置的数据，返回下一个数据的位置。
//11、remove(elem);              //删除容器中所有与elem值匹配的元素。

void printL(const list<int> &l) {
    for (list<int>::const_iterator it = l.begin(); it != l.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
}

void test() {
    list<int> l;
    l.push_back(10);//尾插
    l.push_back(20);
    l.push_back(30);
    l.push_front(100);//头插
    l.push_front(200);
    l.push_front(300);
    printL(l);

    l.pop_back();//尾删
    printL(l);

    l.pop_front();//头删
    printL(l);

    list<int>::iterator it = l.begin();
    l.insert(++it, 1000);//insert插入
    printL(l);

    it = l.begin();
    l.erase(++it);//删除
    printL(l);

    l.push_back(10000);
    l.push_back(10000);
    l.push_back(10000);
    l.push_back(10000);
    printL(l);
    l.remove(10000);//移除
    printL(l);

    l.clear();//清空
    printL(l);
}

int main() {
    test();
    return 0;
}